(function (){ 'use strict'; var jprp={ response: null, getEndpointURL: function(URL){ var locationObject, is_customizer = 'undefined'!==typeof wp && wp.customize && wp.customize.settings && wp.customize.settings.url && wp.customize.settings.url.self; if(is_customizer){ locationObject=document.createElement('a'); locationObject.href=wp.customize.settings.url.self; }else{ locationObject=document.location; } if('string'===typeof URL&&URL.match(/^https?:\/\//)){ locationObject=document.createElement('a'); locationObject.href=URL; } var args='relatedposts=1'; var relatedPosts=document.querySelector('#jp-relatedposts'); if(! relatedPosts){ return false; } if(relatedPosts.hasAttribute('data-exclude')){ args +='&relatedposts_exclude=' + relatedPosts.getAttribute('data-exclude'); } if(is_customizer){ args +='&jetpackrpcustomize=1'; } var pathname=locationObject.pathname; if('/'!==pathname[ 0 ]){ pathname='/' + pathname; } if(''===locationObject.search){ return pathname + '?' + args; }else{ return pathname + locationObject.search + '&' + args; }}, getAnchor: function(post, classNames){ var anchorTitle=post.title; var anchor=document.createElement('a'); anchor.setAttribute('class', classNames); anchor.setAttribute('href', post.url); anchor.setAttribute('title', anchorTitle); anchor.setAttribute('data-origin', post.url_meta.origin); anchor.setAttribute('data-position', post.url_meta.position); if(''!==post.rel){ anchor.setAttribute('rel', post.rel); } var div=document.createElement('div'); div.appendChild(anchor); var anchorHTML=div.innerHTML; return [ anchorHTML.substring(0, anchorHTML.length - 4), '' ]; }, generateMinimalHtml: function(posts, options){ var self=this; var html=''; posts.forEach(function(post, index){ var anchor=self.getAnchor(post, 'jp-relatedposts-post-a'); var classes='jp-relatedposts-post jp-relatedposts-post' + index; if(post.classes.length > 0){ classes +=' ' + post.classes.join(' '); } html += '

'; html += '' + anchor[ 0 ] + post.title + anchor[ 1 ] + ''; if(options.showDate){ html += ''; } if(options.showContext){ html +='' + post.context + ''; } html +='

'; }); return ( '' ); }, generateVisualHtml: function(posts, options){ var self=this; var html=''; posts.forEach(function(post, index){ var anchor=self.getAnchor(post, 'jp-relatedposts-post-a'); var classes='jp-relatedposts-post jp-relatedposts-post' + index; if(post.classes.length > 0){ classes +=' ' + post.classes.join(' '); } if(! post.img.src){ classes +=' jp-relatedposts-post-nothumbs'; }else{ classes +=' jp-relatedposts-post-thumbs'; } var dummyContainer=document.createElement('p'); dummyContainer.innerHTML=post.excerpt; var excerpt=dummyContainer.textContent; html += '
'; if(post.img.src){ html += anchor[ 0 ] + '' +
post.img.alt_text +
'' + anchor[ 1 ]; }else{ var anchor_overlay=self.getAnchor(post, 'jp-relatedposts-post-a jp-relatedposts-post-aoverlay' ); html +=anchor_overlay[ 0 ] + anchor_overlay[ 1 ]; } html += '<' + related_posts_js_options.post_heading + ' class="jp-relatedposts-post-title">' + anchor[ 0 ] + post.title + anchor[ 1 ] + ''; html +='

' + excerpt + '

'; if(options.showDate){ html += ''; } if(options.showContext){ html +='

' + post.context + '

'; } html +='
'; }); return ( '' ); }, setVisualExcerptHeights: function (){ var elements=document.querySelectorAll('#jp-relatedposts .jp-relatedposts-post-nothumbs .jp-relatedposts-post-excerpt' ); if(! elements.length){ return; } var firstElementStyles=getComputedStyle(elements[ 0 ]); var fontSize=parseInt(firstElementStyles.fontSize, 10); var lineHeight=parseInt(firstElementStyles.lineHeight, 10); for(var i=0; i < elements.length; i++){ elements[ i ].style.maxHeight=(5 * lineHeight) / fontSize + 'em'; }}, getTrackedUrl: function(anchor){ var args='relatedposts_hit=1'; args +='&relatedposts_origin=' + anchor.getAttribute('data-origin'); args +='&relatedposts_position=' + anchor.getAttribute('data-position'); var pathname=anchor.pathname; if('/'!==pathname[ 0 ]){ pathname='/' + pathname; } if(''===anchor.search){ return pathname + '?' + args; }else{ return pathname + anchor.search + '&' + args; }}, cleanupTrackedUrl: function (){ if('function'!==typeof history.replaceState){ return; } var cleaned_search=document.location.search.replace(/\brelatedposts_[a-z]+=[0-9]*&?\b/gi, '' ); if('?'===cleaned_search){ cleaned_search=''; } if(document.location.search!==cleaned_search){ history.replaceState({}, document.title, document.location.pathname + cleaned_search); }}, }; function afterPostsHaveLoaded(){ jprp.setVisualExcerptHeights(); var posts=document.querySelectorAll('#jp-relatedposts a.jp-relatedposts-post-a'); Array.prototype.forEach.call(posts, function(post){ document.addEventListener('click', function (){ post.href=jprp.getTrackedUrl(post); }); }); } function startRelatedPosts(){ jprp.cleanupTrackedUrl(); var endpointURL=jprp.getEndpointURL(); var relatedPosts=document.querySelector('#jp-relatedposts'); if(! endpointURL){ return; } if(document.querySelectorAll('#jp-relatedposts .jp-relatedposts-post').length){ afterPostsHaveLoaded(); return; } var request=new XMLHttpRequest(); request.open('GET', endpointURL, true); request.setRequestHeader('x-requested-with', 'XMLHttpRequest'); request.onreadystatechange=function (){ if(this.readyState===XMLHttpRequest.DONE&&this.status===200){ try { var response=JSON.parse(request.responseText); if(0===response.items.length||0===relatedPosts.length){ return; } jprp.response=response; var html, showThumbnails, options={}; if('undefined'!==typeof wp&&wp.customize){ showThumbnails=wp.customize.instance('jetpack_relatedposts[show_thumbnails]').get(); options.showDate=wp.customize.instance('jetpack_relatedposts[show_date]').get(); options.showContext=wp.customize .instance('jetpack_relatedposts[show_context]') .get(); options.layout=wp.customize.instance('jetpack_relatedposts[layout]').get(); }else{ showThumbnails=response.show_thumbnails; options.showDate=response.show_date; options.showContext=response.show_context; options.layout=response.layout; } html = ! showThumbnails ? jprp.generateMinimalHtml(response.items, options) : jprp.generateVisualHtml(response.items, options); var div=document.createElement('div'); relatedPosts.appendChild(div); div.outerHTML=html; if(options.showDate){ var dates=relatedPosts.querySelectorAll('.jp-relatedposts-post-date'); Array.prototype.forEach.call(dates, function(date){ date.style.display='block'; }); } relatedPosts.style.display='block'; afterPostsHaveLoaded(); } catch(error){ }} }; request.send(); } function init(){ if('undefined'!==typeof wp&&wp.customize){ if(wp.customize.selectiveRefresh){ wp.customize.selectiveRefresh.bind('partial-content-rendered', function(placement){ if('jetpack_relatedposts'===placement.partial.id){ startRelatedPosts(); }}); } wp.customize.bind('preview-ready', startRelatedPosts); }else{ startRelatedPosts(); }} if(document.readyState!=='loading'){ init(); }else{ document.addEventListener('DOMContentLoaded', init); }})();